package interfases;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Image;
import java.awt.Toolkit;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

import logica.Cliente;
import logica.Desarrollador;
import logica.Perfil;
import controladores.ControladorPerfil;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.util.Date;


public class IModificarPerfil_2 extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel caja;
	private JTextField nuevoNombre;
	private JTextField nuevoApellido;
	private JTextField nuevoNacimiento;
	private JTextField nuevoEdad;
	private JTextField nuevoEmail;
	private JTextField nuevoLink;
	private JTextField titulo;
	private JTextField nuevoNick;
	
	private JButton aceptar;
	private JButton cancelar;
	private JButton examinar;
	
	private JPanel panelFoto;
	private JLabel cuadroFoto;
	private JLabel lblNick;
	private JLabel lblNombre;
	private JLabel lblApellido;
	private JLabel lblNacimiento;
	private JLabel lblEdad;
	private JLabel lblEmail;
	private JLabel lblLink;
	
	private ControladorPerfil cp = new ControladorPerfil();
	boolean cambioFoto = false;
	boolean muestra = false;
	private byte[] byteFoto = null;
	private Image fotoNueva;
	
	
/*************************************************************************************************************************/
		
	public IModificarPerfil_2(final String nick){
		
		setTitle("Modificar Perfil");
		
		inicializarVentana(true);
		
		final Perfil perfil;
		if(cp.esDesarrollador(nick)){
			muestra = true;
			inicializarVentana(true);
			perfil = cp.obtenerDatos(nick,100);
			cargarDatos(perfil, true);
		}	
		else{ 
			inicializarVentana(false);
			perfil = cp.obtenerDatos(nick,-100);
			cargarDatos(perfil, false);
		}
		
		
		
		/***************************************************************************************************************/
		//ACCION DEL BOTON CANCELAR
		cancelar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				dispose();
			}
		});
		
		//ACCION DEL BOTON EXAMINAR
		examinar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				//CAMBIAR LA FOTO - BOTON EXAMINAR
				cambioFoto = false;
				byteFoto = null;
				JFileChooser se = new JFileChooser();
				se.setFileFilter(new FileNameExtensionFilter("Archivo de Imagen", "jpg", "jpeg"));
				int estado = se.showOpenDialog(null);
				/***************************************************/
				if(estado == JFileChooser.APPROVE_OPTION){
					try {
						
						@SuppressWarnings("resource")
						FileInputStream imagen = new FileInputStream(se.getSelectedFile());
						ByteArrayOutputStream bos = new ByteArrayOutputStream();
						byte[] buf = new byte[1024];
						
						for(int readNum; (readNum = imagen.read(buf)) != -1;){
							bos.write(buf,0,readNum);
						}
						
						fotoNueva = ImageIO.read(se.getSelectedFile()).getScaledInstance(cuadroFoto.getWidth(), cuadroFoto.getHeight(), Image.SCALE_DEFAULT);
						cuadroFoto.setIcon(new ImageIcon(fotoNueva));
						cuadroFoto.updateUI();
						cambioFoto = true;
						byteFoto = bos.toByteArray();
					} catch (Exception e) {
						JOptionPane.showMessageDialog(null,"ERROR al cargra la Foto");
					}
				}
			}
		});
		
		
		//ACCION DEL BOTON ACEPTAR
		aceptar.addActionListener(new ActionListener() {
			@SuppressWarnings("deprecation")
			public void actionPerformed(ActionEvent arg0) {
				
				String nickNuevo = nuevoNick.getText().toUpperCase();
				String nombre = nuevoNombre.getText().toUpperCase();
				String apellido = nuevoApellido.getText().toUpperCase();
				String email = nuevoEmail.getText().toUpperCase();
				int edad = Integer.parseInt(nuevoEdad.getText());
				Image foto = null;
				if(cambioFoto)
					foto = fotoNueva;
				else
					foto = perfil.getFoto();
				
				//HAY QUE VER LO DE LA FECHA
				Date nacimiento;
				
				try {
					String date = nuevoNacimiento.getText();
					int largo = date.length();
				
					String guion = "-";
										
					if(largo > 0){
						
						if(largo > 10 && (!date.substring(4,5).equals(guion) || !date.substring(7,8).equals(guion))){
							JOptionPane.showMessageDialog(null,"Fecha mal ingresada,  Ejemplo: 1900-01-01");
							nuevoNacimiento.requestFocus();
							return;
						}
						
						int anio = Integer.valueOf(date.substring(0, 4));
						int mes = Integer.valueOf(date.substring(5, 7));
						int dia = Integer.valueOf(date.substring(8, 10));
						
						nacimiento = new Date(anio-1900, mes-1, dia);
					}
					else{
						//FECHA DE DEFECTO 1970-01-01
						nacimiento = new Date(1970-1900, 0, 1);
					}
					
				}
				catch (Exception e) {
					JOptionPane.showMessageDialog(null,"Fecha mal ingresada,  Ejemplo: 1900-01-01");
					nuevoNacimiento.requestFocus();
					return;
				}
				
				
				Perfil nuevo;
				if(muestra){
					String link = nuevoLink.getText().toUpperCase();
					nuevo = new Desarrollador(nickNuevo, nombre, apellido, email, nacimiento, edad, foto, link);
				}
				else{
					nuevo = new Cliente(nickNuevo, nombre, apellido, email, nacimiento, edad, foto);
				}
				
				//SI CAMBIA LA FOTO
				if(cambioFoto){
					nuevo.setByteFoto(byteFoto);
				}
				
				//SI CAMBIA EL NICK
				if(!perfil.getNick().equals(nickNuevo)){
					if(cp.existeNick(nickNuevo)){
						JOptionPane.showMessageDialog(null,"EL Nick " +nickNuevo+ " no esta Disponible!");
						nuevoNick.requestFocus();
						return;
					}
				}
				
				
				//SI CAMBIA EL EMAIL
				if (!perfil.getEmail().equals(email)) {
					if(cp.existeEmail(email)){
						JOptionPane.showMessageDialog(null,"EL Email " +email+ " no esta Disponible!");
						nuevoEmail.requestFocus();
						return;
					}
				}
				
				if(cp.cambiarDatos(nuevo, nick, muestra)){
					dispose();
					JOptionPane.showMessageDialog(null,"Los cambios se han guardado satisfactoriamente!");
				}
				else{
					dispose();
					JOptionPane.showMessageDialog(null,"ERROR al guardar los cambios!");
				}
			}		
		});
	}
	
/***********************************************************************************************************************************/
/***********************************************************************************************************************************/
/***********************************************************************************************************************************/

	
	private void cargarDatos(Perfil perfil, boolean muestraLink){
		nuevoNick.setText(perfil.getNick());
		nuevoNombre.setText(perfil.getNombre());
		nuevoApellido.setText(perfil.getApellido());
		nuevoNacimiento.setText(perfil.getNacimiento().toString());
		nuevoEdad.setText(String.valueOf(perfil.getEdad()));
		nuevoEmail.setText(perfil.getEmail());
		
		if(perfil.getFoto() != null){
			try {
				cuadroFoto.setIcon(new ImageIcon(perfil.getFoto().getScaledInstance(cuadroFoto.getWidth(), 
													cuadroFoto.getHeight(), Image.SCALE_DEFAULT)));
				cuadroFoto.updateUI();
			} 
			catch (Exception e) {
				JOptionPane.showMessageDialog(null,"ERROR al cargra la Foto");
			}
		}
		
		if(muestraLink){
			Desarrollador des = (Desarrollador)perfil;
			nuevoLink.setText(des.getLink());
		}
		
	}
	
	
	
	//CENTRA LA PANTALLA PRINCIPAL
		private void centrarPantalla(JFrame ventana, int x, int y){
			Toolkit t = Toolkit.getDefaultToolkit();
			Dimension pantalla = t.getScreenSize();
			int height = pantalla.height;
			int width = pantalla.width;
			int px =  (int) (width-x)/2;
			int py =  (int) (height-y)/2;
			ventana.setBounds(px, py, x, y);
		}
	
	
	
	//INICIALIZA LA VENTANA DEPENDIENDO SI ES UNA VENTANA PARA DESARROLLADOR O CLIENTE
	private void inicializarVentana(boolean muestraLink){
		setResizable(false);
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		centrarPantalla(this, 700, 420);
		caja = new JPanel();
		caja.setForeground(new Color(0, 0, 0));
		caja.setBackground(new Color(255, 222, 173));
		caja.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(caja);
		titulo = new JTextField();
		titulo.setEnabled(false);
		titulo.setBounds(0, 0, 694, 50);
		titulo.setFont(new Font("Eras Medium ITC", Font.BOLD, 20));
		titulo.setForeground(new Color(255, 255, 255));
		titulo.setEditable(false);
		titulo.setBackground(new Color(128, 0, 0));
		if(muestraLink)
			titulo.setText("Modificar Perfil del Desarrollador");
		else
			titulo.setText("Modificar Perfil del Cliente");
		titulo.setHorizontalAlignment(SwingConstants.CENTER);
		titulo.setColumns(10);
		
		panelFoto = new JPanel();
		panelFoto.setForeground(new Color(0, 0, 0));
		panelFoto.setBounds(30, 98, 160, 160);
		panelFoto.setBackground(new Color(255, 250, 205));
		panelFoto.setLayout(null);
		
		cuadroFoto = new JLabel("FOTO");
		cuadroFoto.setForeground(new Color(0, 0, 0));
		cuadroFoto.setHorizontalAlignment(SwingConstants.CENTER);
		cuadroFoto.setBounds(0, 0, 160, 160);
		panelFoto.add(cuadroFoto);
		
		lblNick = new JLabel("Nick:");
		lblNick.setForeground(new Color(0, 0, 0));
		lblNick.setBounds(217, 98, 80, 20);
		lblNick.setFont(new Font("Eras Medium ITC", Font.PLAIN, 12));
		lblNick.setHorizontalAlignment(SwingConstants.RIGHT);
		
		lblNombre = new JLabel("Nombre:");
		lblNombre.setForeground(new Color(0, 0, 0));
		lblNombre.setBounds(217, 129, 80, 20);
		lblNombre.setFont(new Font("Eras Medium ITC", Font.PLAIN, 12));
		lblNombre.setHorizontalAlignment(SwingConstants.RIGHT);
		
		lblApellido = new JLabel("Apellido:");
		lblApellido.setForeground(new Color(0, 0, 0));
		lblApellido.setBounds(217, 160, 80, 20);
		lblApellido.setFont(new Font("Eras Medium ITC", Font.PLAIN, 12));
		lblApellido.setHorizontalAlignment(SwingConstants.RIGHT);
		
		lblNacimiento = new JLabel("Nacimiento:");
		lblNacimiento.setForeground(new Color(0, 0, 0));
		lblNacimiento.setBounds(217, 191, 80, 20);
		lblNacimiento.setFont(new Font("Eras Medium ITC", Font.PLAIN, 12));
		lblNacimiento.setHorizontalAlignment(SwingConstants.RIGHT);
		
		lblEdad = new JLabel("Edad:");
		lblEdad.setForeground(new Color(0, 0, 0));
		lblEdad.setBounds(217, 222, 80, 20);
		lblEdad.setFont(new Font("Eras Medium ITC", Font.PLAIN, 12));
		lblEdad.setHorizontalAlignment(SwingConstants.RIGHT);
		
		lblEmail = new JLabel("Email:");
		lblEmail.setForeground(new Color(0, 0, 0));
		lblEmail.setBounds(217, 253, 80, 20);
		lblEmail.setFont(new Font("Eras Medium ITC", Font.PLAIN, 12));
		lblEmail.setHorizontalAlignment(SwingConstants.RIGHT);
		
		nuevoNick = new JTextField();
		nuevoNick.setForeground(new Color(0, 0, 0));
		nuevoNick.setBounds(307, 98, 329, 20);
		nuevoNick.setColumns(10);
		
		nuevoNombre = new JTextField();
		nuevoNombre.setForeground(new Color(0, 0, 0));
		nuevoNombre.setBounds(307, 129, 329, 20);
		nuevoNombre.setColumns(10);
		
		nuevoApellido = new JTextField();
		nuevoApellido.setForeground(new Color(0, 0, 0));
		nuevoApellido.setBounds(307, 160, 329, 20);
		nuevoApellido.setColumns(10);
		
		nuevoNacimiento = new JTextField();
		nuevoNacimiento.setForeground(new Color(0, 0, 0));
		nuevoNacimiento.setBounds(307, 191, 329, 20);
		nuevoNacimiento.setColumns(10);
		
		nuevoEdad = new JTextField();
		nuevoEdad.setForeground(new Color(0, 0, 0));
		nuevoEdad.setBounds(307, 222, 86, 20);
		nuevoEdad.setColumns(10);
		
		nuevoEmail = new JTextField();
		nuevoEmail.setForeground(new Color(0, 0, 0));
		nuevoEmail.setBounds(307, 253, 329, 20);
		nuevoEmail.setColumns(10);
		
		aceptar = new JButton("Aceptar");
		aceptar.setForeground(new Color(0, 0, 0));
		aceptar.setBounds(468, 353, 95, 27);
		aceptar.setFont(new Font("Eras Medium ITC", Font.PLAIN, 15));
		
		cancelar = new JButton("Cancelar");
		cancelar.setForeground(new Color(0, 0, 0));
		cancelar.setFont(new Font("Eras Medium ITC", Font.PLAIN, 15));
		cancelar.setBounds(573, 354, 95, 27);
		
		examinar = new JButton("Examinar");
		examinar.setForeground(new Color(0, 0, 0));
		examinar.setBounds(40, 269, 140, 27);
		examinar.setFont(new Font("Eras Medium ITC", Font.PLAIN, 15));
		
		caja.setLayout(null);
		caja.add(lblNombre);
		caja.add(lblApellido);
		caja.add(lblNacimiento);
		caja.add(lblEdad);
		caja.add(lblEmail);
		caja.add(titulo);
		caja.add(panelFoto);
		caja.add(lblNick);
		caja.add(nuevoNick);
		caja.add(nuevoNombre);
		caja.add(nuevoApellido);
		caja.add(nuevoNacimiento);
		caja.add(nuevoEdad);
		caja.add(nuevoEmail);
		caja.add(aceptar);
		caja.add(cancelar);
		caja.add(examinar);
		
		if(muestraLink){
			lblLink = new JLabel("Link:");
			lblLink.setBounds(217, 284, 80, 20);
			lblLink.setFont(new Font("Eras Medium ITC", Font.PLAIN, 12));
			lblLink.setHorizontalAlignment(SwingConstants.RIGHT);
			caja.add(lblLink);
			
			nuevoLink = new JTextField();
			nuevoLink.setBounds(307, 284, 329, 20);
			nuevoLink.setColumns(10);
			caja.add(nuevoLink);
		}		
	}
	
	
	
	
	
	
/******************************************************************************************************************************/
/******************************************************************************************************************************/
}
